package nyist.media.repository;

import nyist.media.entity.admin.Admin;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import javax.persistence.criteria.Predicate;
import java.util.Optional;

/**
 * 管理員管理
 *
 * @author : dcf
 * @date : 2019/3/12
 */

public interface AdminRepository extends JpaRepository<Admin, Long>, JpaSpecificationExecutor<Admin> {

    /**
     * 查询管理员信息
     *
     * @param username 登录名
     * @return 管理员信息
     */
    Optional<Admin> findByUsername(String username);

    /**
     * 查询管理员信息
     *
     * @param pageRequest 分页对象
     * @param keyword     搜索关键字
     * @return 管理员列表对象
     */
    default Page<Admin> findAdminList(PageRequest pageRequest, String keyword) {
        return findAll((root, cq, cb) -> {
            Predicate r = cb.conjunction();
            if (!StringUtils.isEmpty(keyword)) {
                String s = "%" + keyword + "%";
                r = cb.and(r, cb.or(cb.like(root.get("name"), s), cb.like(root.get("username"), s), cb.like(root.get("email"), s)));
            }
            return r;
        }, pageRequest);
    }
}

